package cn.edu.lcu.cs.javaprogramming.clazz;

import cn.edu.lcu.cs.javaprogramming.BaseTest;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;

import java.util.Arrays;
import java.util.Random;

/**
 * 随机对象演示
 * 
 * @author Ling
 *
 */
public class RandomDemo extends BaseTest {

	/**
	 * 生成100个随机数，重复运行5次，每次使用相同的种子。
	 */
	@RepeatedTest(5)
	public void randomWithFixSeed() {
		int seed = 0;
		// 固定的种子，生成的随机数序列是固定的
		Random random = new Random(seed);
		for (int i = 0; i < 100; i++) {
			System.out.print(i + ":" + random.nextInt() + "\t");
		}
	}

	/**
	 * 生成100个随机数，重复运行5次，每次使用不同的种子。
	 */
	@RepeatedTest(5)
	public void randomWithChangingSeeds() {
		int seed = 0;
		// 变化的种子，生成的随机数序列是随机的
		Random random = new Random(System.currentTimeMillis());
		for (int i = 0; i < 100; i++) {
			System.out.print(i + ":" + random.nextInt() + "\t");
		}
	}

	/**
	 * 生成[low, high]之间的count个随机数，使用Junit5的参数化测试。
	 */
	@ParameterizedTest
	@CsvSource({"80, 0, 100", "40, 60, 100"})
	public void randomInts(int count, int low, int high) {
		//int[] array = new Random().ints(count, low, high + 1).toArray();
		int[] array = new int[count];
		Random random = new Random();
		for (int i = 0; i < array.length; i++) {
			array[i] = random.nextInt(high - low + 1) + low;
		}
		System.out.print(Arrays.toString(array));
	}
}
